import axios from 'axios'
import { ElMessage } from 'element-plus'

// 动态获取后端API地址
const getApiBaseURL = () => {
  // 获取当前访问的协议和主机名
  const protocol = window.location.protocol
  const hostname = window.location.hostname

  // 如果是开发环境且从localhost访问，使用localhost
  if (import.meta.env.DEV && hostname === 'localhost') {
    return 'http://localhost:8000/api'
  }

  // 其他情况（包括从外部IP访问），使用当前主机的8000端口
  return `${protocol}//${hostname}:8000/api`
}

// 创建axios实例
const api = axios.create({
  baseURL: getApiBaseURL(),
  timeout: 30000, // 增加超时时间到30秒
  headers: {
    'Content-Type': 'application/json'
  }
})

// 添加调试信息
console.log('API Base URL:', getApiBaseURL())

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 添加token到请求头
    const token = localStorage.getItem('access_token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response) {
      const { status, data } = error.response
      
      if (status === 401) {
        // token过期，清除本地存储并跳转到登录页
        localStorage.removeItem('access_token')
        localStorage.removeItem('refresh_token')
        localStorage.removeItem('user_info')
        // 避免在登录页面时重复跳转
        if (window.location.pathname !== '/login') {
          window.location.href = '/login'
        }
      } else if (status === 403) {
        ElMessage.error('权限不足')
      } else if (status >= 500) {
        ElMessage.error('服务器错误')
      } else {
        ElMessage.error(data.error || data.message || '请求失败')
      }
    } else if (error.code === 'ECONNABORTED') {
      ElMessage.error(`请求超时，请检查网络连接或后端服务状态 (${getApiBaseURL()})`)
    } else if (error.code === 'ERR_NETWORK') {
      ElMessage.error(`网络连接失败，请检查后端服务是否启动 (${getApiBaseURL()})`)
    } else {
      ElMessage.error(`网络错误: ${error.message}`)
    }
    return Promise.reject(error)
  }
)

export default api
